package com.yidu.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yidu.action.vo.TreeNode;
import com.yidu.comment.Page;
import com.yidu.model.SnModule;
import com.yidu.service.SnModuleService;

/**
 * 
 * 描述:模块Action类
 * @author 陈旭
 * @date 2018年11月26日
 */
@Controller
@RequestMapping("/module")
public class SnModuleAction {
	/**
	 * 注入模块Service
	 */
	@Resource
	private SnModuleService moduleService;
	
	/**
	 * 查询所有模块表
	 * @param page		当前页数
	 * @param limit		每页多少行
	 * @param module	模块对象
	 * @return		map集合
	 */
	@RequestMapping("queryAll")
	@ResponseBody
	public Map<String, Object> findAll(String page,String limit,SnModule module){
		//创建一个Page对象
		Page pages=new Page();
		//给当前页数赋值
		pages.setCurPage(Integer.valueOf(page));
		//给行数赋值
		pages.setRows(Integer.valueOf(limit));
		
		//创建一个map对象
		Map<String, Object> maps=new HashMap<>();
		//将page对象加入到map集合
		maps.put("page", pages);
		//将模块对象加入到map集合
		maps.put("module", module);
		//调用条queryAll方法
		List<SnModule> list=moduleService.queryAll(maps);
		//调用findCount方法
		int count = moduleService.findCount(maps);
		//创建一个map
		Map<String, Object> map = new HashMap<>();
		//code
		map.put("code", 0);
		//msg
		map.put("msg", 0);
		//count
		map.put("count", count);
		//将list赋值给data中
		map.put("data", list);
		//返回一个map集合
		return map;
	}
	/**
	 * 删除
	 * @return
	 */
	@RequestMapping("delete")
	@ResponseBody
	public int delete(String moId){
		//调用根据id查询的方法
		SnModule snModule = moduleService.selectByPrimaryKey(moId);
		//修改数据为不可用
		snModule.setIsva(0);
		//调用修改的方法
		int row = moduleService.updateByPrimaryKeySelective(snModule);
		//返回行数
		return row;
	}
	/**
	 * 修改上屏
	 * @param moId	模块ID
	 * @return	模块对象
	 */
	@RequestMapping("findById")
	@ResponseBody
	public SnModule findById(String moId){
		//调用根据ID查询的方法
		return moduleService.selectByPrimaryKey(moId);
	}
	/**
	 * 增加或修改
	 * @param snModule	模块Bean对象
	 * @return	行数
	 */
	@RequestMapping("addOrUpdate")
	@ResponseBody
	public int addOrUpdate(SnModule snModule){
		//给是否有效属性 赋值1
		snModule.setIsva(1);
		//调用增加或修改的方法
		return moduleService.addOrUpdate(snModule);
	}
	/**
	 * 查询所有模块名称
	 * @return	模块List
	 */
	@RequestMapping("query")
	@ResponseBody
	public List<SnModule> query(){
		//调用query方法
		return moduleService.query();
	}
	/**
	 * 模块名称树节点
	 * @return
	 */
	@RequestMapping("queryList")
	@ResponseBody
	public List<TreeNode> queryList(){
		//调用服务类queryTree方法
		List<TreeNode> list = moduleService.queryTree();
		//调用diGuiTree方法
		diGuiTree(list);
		//返回list
		return list;
	}
	/**
	 * 递归形成树节点
	 * @param list	TreeNode List集合
	 */
	public void diGuiTree(List<TreeNode> list){
		//循环参数list
		for (TreeNode treeNode : list) {
			//调用服务类queryTreeNode方法
			List<TreeNode> list2 = moduleService.queryTreeNode(treeNode.getId());
			//给treeNode对象Children赋值
			treeNode.setChildren(list2);
			//调用自己本身的方法
			diGuiTree(list2);
		}
	}
	/**
	 * 根据Session ID 查询模块
	 * @param userId	用户ID
	 * @return	模块List
	 */
	@RequestMapping("findByModule")
	@ResponseBody
	public List<SnModule> findByModule(String userId){
		//调用findByModule方法
		List<SnModule> list = moduleService.findByModule(userId);
		//for循环第一次
		for (int i = 0; i < list.size() - 1; i++) {
			//for循环第二次
            for (int j = list.size() - 1; j > i; j--) {
            	//判断如果第一次集合的MoId等于第二次集合的MoId
                if (list.get(j).getMoId().equals(list.get(i).getMoId())) {
                	//移除j
                    list.remove(j);
                }
            }
		}
		return list;
	}
	
}
